package com.fr.report.script.function;

import com.fr.report.script.Function;
import com.fr.report.script.Function.Type;
import com.fr.report.script.NormalFunction;
import com.fr.report.script.Primitive;
import com.fr.util.Utils;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class WEEKDATE extends NormalFunction
{
  public Object run(Object[] paramArrayOfObject)
  {
    if (paramArrayOfObject.length < 4)
      return Primitive.ERROR_NAME;
    return weekdate(Utils.objectToNumber(paramArrayOfObject[0], false).intValue(), Utils.objectToNumber(paramArrayOfObject[1], false).intValue(), Utils.objectToNumber(paramArrayOfObject[2], false).intValue(), Utils.objectToNumber(paramArrayOfObject[3], false).intValue());
  }

  public static Date weekdate(int paramInt1, int paramInt2, int paramInt3, int paramInt4)
  {
    GregorianCalendar localGregorianCalendar = new GregorianCalendar(paramInt1, paramInt2 - 1, 1);
    int i = localGregorianCalendar.get(7);
    if (i == 1)
      localGregorianCalendar.add(5, -6);
    else
      localGregorianCalendar.add(5, 2 - i);
    if (paramInt4 == -1)
      localGregorianCalendar.add(5, (paramInt3 - 1) * 7 + 6);
    else
      localGregorianCalendar.add(5, (paramInt3 - 1) * 7 + paramInt4 - 1);
    return localGregorianCalendar.getTime();
  }

  public Function.Type getType()
  {
    return Function.DATETIME;
  }

  public String getCN()
  {
    return "weekdate(year,month,weekOfMonth,dayOfWeek): 返回指定年月的指定周的周几的具体日期。\n示例：\nweekdate(2009,10,2,1)\n返回的是2009年的10月的第二个周的第一天即星期一的日期，返回的是2009-10-05\n最后一个参数dayOfWeek为-1时，表示这个周的最后一天\n示例：\nweekdate(2009,12,1,-1)\n返回的是2009年的12月的第一个周的最后一天即星期天的日期，返回的是2009-12-06\n";
  }

  public String getEN()
  {
    return "";
  }
}